//object表示一个js对象
export {}
let a:object;
a = {};
a = function(){};
//{}指定对象中可以包含哪些属性
//语法：{属性名：属性值，...}
//属性名加上？表示属性可选
let b:{name:string,age?:number};
b={name:"孙悟空"};
//[propName:string]:any表示任意类型的属性，并且数量不限
let c:{name:"猪八戒",[propName:string]:any};
c = {name:"猪八戒",age:18,sex:"男",job:"中级前端工程师"}

/**
 * 设置函数结构的类型声明
 *   语法：（形参：类型，...）=>返回值类型；
 */
let d : (a:number,b:number)=>number;
// d = function (n1:string,n2:string):number{
//     return 10;
// }

/**
 * 数组的声明方式
 *     类型[]
 *     Array[类型]
 */
//string[]表示字符串数组
let e :string[];
e= ['a','b','c'];

//Array<number>表示数值类型数组
let g :Array<number>;
g=[1,2,3];

//元组就是固定长度的数组
/**
 * 元组的语法：
 *      [类型，类型，类型，...]
 */
let h:[string,number];
h = ['hello',123];

/**
 * enum枚举
 */
enum Gender{
    Male,
    Female
}
let i :{name:string,gender:Gender};
i = {
    name:"孙悟空",
    gender:Gender.Male
}
console.log(i.gender === Gender.Male)

//&表示同时
let j :{name:string}&{age:number};
j = {name:"孙悟空",age:19};

//类型的别名
/**
 * 语法：type 类型别名 = 类型或其他值
 */
type str = string;
type num = 1 | 2 | 3 | 4 | 5;
let k :num;
let m: num;
let n :str;
